package com.qinggeng.project.system.service;

import com.qinggeng.project.api.dto.GoodsCollectDto;
import com.qinggeng.project.api.dto.GoodsDto;
import com.qinggeng.project.api.dto.GoodsInfoDto;
import com.qinggeng.project.api.dto.ShareDto;
import com.qinggeng.project.system.domain.Goods;
import com.qinggeng.project.system.domain.GoodsMark;
import com.qinggeng.project.system.domain.GoodsPercent;
import com.qinggeng.project.system.domain.vo.GoodsKeyWordsVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 商品信息Service接口
 *
 * @author qinggeng
 * @date 2020-06-15
 */
public interface IGoodsService
{
    /**
     * 查询商品信息
     *
     * @param goodsId 商品信息ID
     * @return 商品信息
     */
    public Goods selectGoodsById(Long goodsId);

    /**
     * 查询预购信息
     * @param goodsId
     * @return
     */
    public Goods selectGoodsByIdYg(Long goodsId);



    /**
     * 查询商品信息列表
     *
     * @param goods 商品信息
     * @return 商品信息集合
     */
    public List<Goods> selectGoodsList(Goods goods);



    /**
     * 查询商品信息列表
     *
     * @param goods 商品信息
     * @return 商品信息集合
     */
    public List<Goods> systemSelectGoodsList(Goods goods);

    /**
     * 新增商品信息
     *
     * @param goods 商品信息
     * @return 结果
     */
    public int insertGoods(Goods goods);

    /**
     * 修改商品信息
     *
     * @param goods 商品信息
     * @return 结果
     */
    public int updateGoods(Goods goods);

    /**
     * 批量删除商品信息
     *
     * @param goodsIds 需要删除的商品信息ID
     * @return 结果
     */
    public int deleteGoodsByIds(Long[] goodsIds);

    /**
     * 删除商品信息信息
     *
     * @param goodsId 商品信息ID
     * @return 结果
     */
    public int deleteGoodsById(Long goodsId);


    int logicalDeleteGoodsByIds(Long[] goodsIds);


    /**
     * 获取商品列表
     * @param goods
     * @return
     */
    List<GoodsDto> selectGoodsListDto(Goods goods);

    /**
     * 获取商品列表
     * @param goods
     * @return
     */
    List<GoodsDto> selectGoodsListDto1(Goods goods);

    /**
     * 获取商品信息
     * @param goodsId 商品ID
     * @param shopId 商户ID
     * @param lng
     * @param lat
     * @return
     */
    GoodsInfoDto selectGoodsDtoById(Long goodsId, Long shopId, Float lng, Float lat);


    GoodsInfoDto selectGoodsDtoById(Long goodsId, Long shopId);

    /**
     * 根据多个分类id，查询商品集合
     * @param goods
     * @return
     */
    List<GoodsDto> selectGoodsListDtoForOne(Goods goods);



    /**
     * 获取用户购物车信息，设置商品加入购物车的数量
     * @param goodsDtoList
     * @param shopId
     * @return
     */
    List<GoodsDto> setGoodsDtoFromUserCart(List<GoodsDto> goodsDtoList,Long shopId,Long userId);


    /**
     * 查询最大主类Id
     * @return
     */
    Long selectMaxGoodsId();

    /**
     * 商品sKu集合
     * @param where
     * @return
     */
    List<GoodsDto> selectGoodsSkuList(Goods where);

    GoodsMark selectGoodsMarkById(String id);

    List<GoodsMark> getGoodsMarkList(GoodsCollectDto collectDto, String goodsMark);
    /**
     * 查询库存小于30商品信息列表
     * @param goods 商品信息
     * @return 商品信息集合
     */
    List<Goods> selectLittleGoodsListForOne(Goods goods);

    Integer getGoodsLimitNum(Long goodsId);

    /**
     * 查询捶一捶商品列表
     * @param goods
     * @return
     */
    List<Goods> selectBeatGoodsList(Goods goods);

    boolean updateGoodsPercentage(Goods goods);


    List<GoodsKeyWordsVO> selectKeyWord(String inputWord);

    public List<GoodsDto> recommendGoodsOrder(List<GoodsDto> goodsDtoList,Long classify);

    public void shareInformation(ShareDto shareDto, List<GoodsDto> goodsDtoList);


    BigDecimal getGoodsPercentage(BigDecimal buyPrice, BigDecimal goodsPrice, BigDecimal percent, Long goodsId);

    public BigDecimal getGoodsPercentageByGoodsPercent(BigDecimal profit,BigDecimal goodsPrice,BigDecimal percent,Long goodsId);

    public BigDecimal getPercentage(BigDecimal profit,BigDecimal percent);

    BigDecimal getProfitByBuyPrice(BigDecimal buyPrice,BigDecimal goodsPrice);

    public BigDecimal getProfitByProfitRate(BigDecimal goodsPrice,BigDecimal profitRate);

    /**
     * 解除商品关系
     * @param
     */
    boolean relieve(Long goodsId);

    /**
     * 建立商品关系
     * @param
     */

    boolean establish(Long goodsId,Long wholeGoodsId);

    /**
     * 会员商品
     * @param
     */
    List<Goods> selectGoodsListDtoForOneByGoodsIds();

}
